package gob.cgr.sgrh.facade;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.ejb.EJB;
import javax.ejb.Remote;
import javax.ejb.Stateless;


import gob.cgr.sgrh.ejb.entidad.ActaEntrega;
import gob.cgr.sgrh.ejb.entidad.AdmGrado;
import gob.cgr.sgrh.ejb.entidad.Ambito;
import gob.cgr.sgrh.ejb.entidad.Cargo;
import gob.cgr.sgrh.ejb.entidad.CondicionEstudio;
import gob.cgr.sgrh.ejb.entidad.CumplimientoDocumentacion;
import gob.cgr.sgrh.ejb.entidad.DatoFamiliar;
import gob.cgr.sgrh.ejb.entidad.Docencia;
import gob.cgr.sgrh.ejb.entidad.Documento;
import gob.cgr.sgrh.ejb.entidad.EstudioBasico;
import gob.cgr.sgrh.ejb.entidad.EstudioProfesional;
import gob.cgr.sgrh.ejb.entidad.FormacionLaboral;
import gob.cgr.sgrh.ejb.entidad.Legajo;
import gob.cgr.sgrh.ejb.entidad.Maestra;
import gob.cgr.sgrh.ejb.entidad.MovimientoDePersonal;
import gob.cgr.sgrh.ejb.entidad.Persona;
import gob.cgr.sgrh.ejb.entidad.Personal;
import gob.cgr.sgrh.ejb.entidad.Puesto;
import gob.cgr.sgrh.ejb.entidad.PuestoCapacitacion;
import gob.cgr.sgrh.ejb.entidad.PuestoEducacion;
import gob.cgr.sgrh.ejb.entidad.SeccionLegajo;
import gob.cgr.sgrh.ejb.entidad.SolicitudDocumento;
import gob.cgr.sgrh.ejb.entidad.SolicitudLegajo;
import gob.cgr.sgrh.ejb.entidad.UnidadOrganica;
import gob.cgr.sgrh.ejb.entidad.Usuario;
import gob.cgr.sgrh.ejb.local.AmbitoDAO;
import gob.cgr.sgrh.ejb.local.DatoFamiliarDAO;
import gob.cgr.sgrh.ejb.local.EstudioProfesionalDAO;
import gob.cgr.sgrh.ejb.local.MaestraDAO;
import gob.cgr.sgrh.ejb.local.PersonaDAO;
import gob.cgr.sgrh.ejb.local.PersonalDAO;
import gob.cgr.sgrh.ejb.local.PuestoDAO;
import gob.cgr.sgrh.ejb.local.UnidadOrganicaDAO;
import gob.cgr.sgrh.ejb.local.UsuarioDAO;
import gob.cgr.sgrh.ejb.remote.SigerhRemote;

@Stateless
@Remote(SigerhRemote.class)
public class SigerhService implements SigerhRemote{

	@EJB
	private AmbitoDAO ambitoMgr;
	
	@EJB
	private PersonalDAO personalMgr;
	
	@EJB
	private PersonaDAO personaMgr;
	@EJB
	private MaestraDAO maestraMgr;
	@EJB
	private DatoFamiliarDAO familiarMgr;
	
	@EJB
	private EstudioProfesionalDAO estudioProfesionalMgr;
	
	@EJB
	private UsuarioDAO usuarioMgr;
	
	@EJB
	private UnidadOrganicaDAO uoMgr;
	
	@EJB
	private PuestoDAO puestoMgr;
	
	@Override
	public List<Ambito> getDepartamentos() {
		// TODO Auto-generated method stub
		return ambitoMgr.getDepartamentos();
	}

	@Override
	public List<Ambito> getAmbitosByPdr(Integer ambCod) {
		// TODO Auto-generated method stub
		return ambitoMgr.getAmbitosByPdr(ambCod);
	}

	@Override
	public Personal registrarPersonal(Personal personal) {
		// TODO Auto-generated method stub
		return personalMgr.registrarPersonal(personal);
	}

	@Override
	public Ambito getAmbito(Integer idAmbito) {
		//ambitoMgr.obtener(idAmbito);
		return ambitoMgr.obtener(idAmbito);
	}
	
	@Override
	public List<Personal> buscarPersonal(Personal p){
		return personalMgr.buscarPersonal(p);
		
	}

	@Override
	public void actualizarPersonal(Personal personal) {
		// TODO Auto-generated method stub
		personalMgr.actualizar(personal);
	}
	@Override
	public Persona buscarPersona(String dni) {
		// TODO Auto-generated method stub
		return personaMgr.buscarPersona(dni);
	}

	

	@Override
	public void agregarFamiliar(DatoFamiliar dato) {
		// TODO Auto-generated method stub
			personaMgr.agregarFamiliar(dato);
	
	}

	@Override
	public void agregarEstudiosBasicos(EstudioBasico ebasico) {
		// TODO Auto-generated method stub
		personaMgr.agregarEstudiosBasicos(ebasico);
	}

	@Override
	public void agregarEstudiosProfesionales(EstudioProfesional eprof) {
		// TODO Auto-generated method stub
		personaMgr.agregarEstudiosProfesionales(eprof);
	}
	@Override
	public List<Maestra> listarTiposParentezco() {
		return maestraMgr.listarMaestra("DATO_FAMILIAR","PARENTEZCO");
	}
	@Override
	public Personal cargarDatosCompletos(Personal p) {
		// TODO Auto-generated method stub
	
		p=personalMgr.obtener(p.getIdPersonal());
		p=checkFamiliarIsPersonal(p);
		p.getMeritoDemeritoList();
		p.getMovimientoDePersonalList();
				
		Persona persona=personaMgr.cargarPersonaCompleta(p.getIdPersona().getIdPersona());
		p.setIdPersona(persona);
		//System.out.println("termino la carga");
		
		return p;
	}
	
	
	private Personal checkFamiliarIsPersonal(Personal p){
		List<DatoFamiliar>l=p.getDatoFamiliarList();
		for(DatoFamiliar f:l){
			if(f.getIdPersona().getPersonalList().size()>0 && f.getIdPersona().getPersonalList().get(0).getEstado().equals("ACTIVO")){
				f.getIdPersona().setPersonal(true);//si es personal
			}
			
		}
		p.setDatoFamiliarList(l);
		return p;
	}
	
	
	
	@Override
	public void quitarEstudiosBasicos(EstudioBasico ebasico) {
		// TODO Auto-generated method stub
		personaMgr.quitarEstudiosBasicos(ebasico);
		
	}
	@Override
	public void quitarEstudiosProfesionales(EstudioProfesional eprof) {
		personaMgr.quitarEstudiosProfesionales(eprof);
		
	};
	@Override
	public void quitarFamiliar(DatoFamiliar dato) {
		// TODO Auto-generated method stub
		personaMgr.quitarFamiliar(dato);
	}
	
	@Override
	public void agregarFormacionLaboral(FormacionLaboral formacion) {
		// TODO Auto-generated method stub
		personaMgr.agregarFormacionLaboral(formacion);
	}
	@Override
	public void quitarFormacionLaboral(FormacionLaboral formacion) {
		// TODO Auto-generated method stub
		personaMgr.quitarFormacionLaboral(formacion);
	}
	
	
	
	@Override
	public List<EstudioBasico> listarEstudioBasicoPersona(Integer idPersona) {
		// TODO Auto-generated method stub
		return personaMgr.listarEstudioBasicoPersona(idPersona);
	}
@Override
public List<EstudioProfesional> listarEstudioProfesionalPersona(
		Integer idPersona) {
	// TODO Auto-generated method stub
	return personaMgr.listarEstudioProfesionalPersona(idPersona);
}

@Override
public List<Documento> listarDocumentosDeSolicitud() {
	// TODO Auto-generated method stub
	return maestraMgr.listarDocumentosDeSolicitud();
}

@Override
public List<Documento> listarDocumentosObligatorios() {
	// TODO Auto-generated method stub
	return maestraMgr.listarDocumentosObligatorios();
}

@Override
public List<AdmGrado> listarGradosAcademicos() {
	// TODO Auto-generated method stub
	return estudioProfesionalMgr.listarGrados();
}
@Override
public List<CondicionEstudio> listarCondicionEstudios() {
	// TODO Auto-generated method stub
	return estudioProfesionalMgr.listarCondicionEstudios();
}

@Override
public void registrarSolicitudDocumento(SolicitudDocumento sol) {
	// TODO Auto-generated method stub
	personalMgr.registrarSolicitudDocumento(sol);
}

@Override
public Usuario validarUsuario(Usuario user) {
	// TODO Auto-generated method stub
	return usuarioMgr.validarUsuario(user);
}
@Override
public Personal buscarPersonalPorDNI(String dni) {
	// TODO Auto-generated method stub
	return personalMgr.buscarPersonalPorDNI(dni);
}

@Override
public List<SolicitudDocumento> listarConsultaSolicitudes(
		Integer idPersonal, Date desde, Date hasta, String estado) {
	// TODO Auto-generated method stub
	return personalMgr.listarSolicitudes(idPersonal, desde, hasta, estado);
}
public SolicitudDocumento actualizarSolicitudDocumento(SolicitudDocumento sol){
	return personalMgr.actualizarSolicitudDocumento(sol);
}

@Override
public List<CumplimientoDocumentacion> listarCumplimiento(Persona p) {
	// TODO Auto-generated method stub
	return personalMgr.listarCumplimiento(p);
}

@Override
public void actualizarCumplimientoDocumentacion(
		List<CumplimientoDocumentacion> documentacion) {
	// TODO Auto-generated method stub
	personalMgr.actualizarCumplimientoDocumentacion(documentacion);
}

@Override
public List<UnidadOrganica> listarUnidadesOrganicas() {
	// TODO Auto-generated method stub
	return maestraMgr.listarUnidadesOrganicas();
}

@Override
public List<Puesto> listarPuestos(Integer idCargo) {
	// TODO Auto-generated method stub
	return maestraMgr.listarPuestos(idCargo);
}
@Override
public List<Cargo> listarCargos() {
	// TODO Auto-generated method stub
	return maestraMgr.listarCargos();
}
@Override
public List<MovimientoDePersonal> listarMovimientosPersonal(
		Integer idPersonal) {
	// TODO Auto-generated method stub
	return personalMgr.listarMovimientosPersonal(idPersonal);
}

@Override
public void actualizarMovimientoPersonal(MovimientoDePersonal movimiento) {
	// TODO Auto-generated method stub
	personalMgr.actualizarMovimientoPersonal(movimiento);
}

@Override
public void agregarDocencia(Docencia docencia) {
	// TODO Auto-generated method stub
	personaMgr.agregarDocencia(docencia);
}

@Override
public void quitarDocencia(Docencia docencia) {
	// TODO Auto-generated method stub
	personaMgr.quitarDocencia(docencia);
	
}

@Override
public List<Docencia> listarDocencias(Integer idPersona) {
	// TODO Auto-generated method stub
	return personaMgr.listarDocencias(idPersona);
}

@Override
public List<Legajo> listarLegajoPersonal(Integer idPersonal,
		Integer seccionLegajo) {
	// TODO Auto-generated method stub
	return personalMgr.listarLegajoPersonal(idPersonal, seccionLegajo);
}@Override
public List<SeccionLegajo> listarSeccionesLegajo() {
	// TODO Auto-generated method stub
	return maestraMgr.listarSeccionesLegajo();
}

@Override
public void actualizarLegajo(Legajo legajo) {
	// TODO Auto-generated method stub
	personalMgr.actualizarLegajo(legajo);
}
@Override
public void eliminarLegajo(Legajo legajo) {
	// TODO Auto-generated method stub
	personalMgr.eliminarLegajo(legajo);
}
@Override
public List<Documento> listarDocumentosPorTipo(String tipo) {
	// TODO Auto-generated method stub
	return maestraMgr.listarDocumentosPorTipo(tipo);
}

@Override
public Legajo obtenerLegajo(Integer idLegajo) {
	// TODO Auto-generated method stub
	return personalMgr.obtenerLegajo(idLegajo);
}
@Override
public void actualizarCumplimientoDocumentacion(
		CumplimientoDocumentacion documentacion) {
	// TODO Auto-generated method stub
	personalMgr.actualizarCumplimientoDocumentacion(documentacion);
}

@Override
public void eliminarSolicitudLegajo(SolicitudLegajo s) {
	// TODO Auto-generated method stub
	personalMgr.eliminarSolicitudLegajo(s);
}
@Override
public void solicitarActualizarLegajo(SolicitudLegajo s, Legajo l) {
	// TODO Auto-generated method stub
	personalMgr.solicitarActualizarLegajo(s, l);
}
@Override
public List<SolicitudLegajo> listarSolicitudesDeLegajo(Integer idPersona,
		Date desde, Date hasta, String estado) {
	// TODO Auto-generated method stub
	return personalMgr.listarSolicitudesDeLegajo(idPersona, desde, hasta, estado);
}
@Override
public SolicitudLegajo obtenerSolicitudLegajo(Integer idSolicitudLegajo) {
	// TODO Auto-generated method stub
	return personalMgr.obtenerSolicitudLegajo(idSolicitudLegajo);
}
@Override
public void actualizarSolicitudLegajo(SolicitudLegajo s) {
	// TODO Auto-generated method stub
	personalMgr.actualizarSolicitudLegajo(s);
}

@Override
public List<SeccionLegajo> listarSeccionesLegajoParaSolicitud() {
	List<SeccionLegajo> list=new ArrayList<SeccionLegajo>();
	for(SeccionLegajo sl:listarSeccionesLegajo()){
		if(sl.getNumero()==1 || sl.getNumero()==2 || sl.getNumero()==12)
			list.add(sl);
	}
	return list;
}
@Override
public List<ActaEntrega> listarActasEntregas(Integer idPersona,
		Date desde, Date hasta, String estado) {
	// TODO Auto-generated method stub
	return personalMgr.listarActasEntregas(idPersona, desde, hasta, estado);
}

@Override
public ActaEntrega obtenerActaEntrega(Integer idActaEntrega) {
	// TODO Auto-generated method stub
	return personalMgr.obtenerActaEntrega(idActaEntrega);
}

@Override
public ActaEntrega registrarActaEntrega(ActaEntrega acta) {
	// TODO Auto-generated method stub
	return personalMgr.registrarActaEntrega(acta);
}

@Override
public ActaEntrega actualizarActaEntrega(ActaEntrega acta) {
	// TODO Auto-generated method stub
	return personalMgr.actualizarActaEntrega(acta);
}

@Override
public void eliminarActaEntrega(ActaEntrega acta) {
	// TODO Auto-generated method stub
	personalMgr.eliminarActaEntrega(acta);
}
@Override
public List<Maestra> listarMaestra(String entidad, String campo) {
	// TODO Auto-generated method stub
	return maestraMgr.listarMaestra(entidad, campo);
}
@Override
public UnidadOrganica actualizarUnidadOrganica(UnidadOrganica uo) {
	// TODO Auto-generated method stub
	return uoMgr.actualizar(uo);
}
@Override
public UnidadOrganica registrarUnidadOrganica(UnidadOrganica uo) {
	// TODO Auto-generated method stub
	uoMgr.registrar(uo);
	return uo;
}
@Override
public UnidadOrganica obtenerUnidadOrganica(Integer uoId) {
	// TODO Auto-generated method stub
	return uoMgr.obtener(uoId);
}
@Override
public Persona cargarPersonaCompleta(Integer idPersona) {
	// TODO Auto-generated method stub
	return personaMgr.cargarPersonaCompleta(idPersona);
}
@Override
public List<FormacionLaboral> listarFormacionLaboralPersona(
		Integer idPersona) {
	// TODO Auto-generated method stub
	return personaMgr.listarFormacionLaboralPersona(idPersona);
}

@Override
public List<Puesto> listarPuestosPorUnidadOrganica(Integer idUnidadOrganica) {
	// TODO Auto-generated method stub
	return puestoMgr.listarPorIdUnidadOrganica(idUnidadOrganica);
}

@Override
public Puesto registrarPuesto(Puesto puesto) {
	// TODO Auto-generated method stub
	
	return puestoMgr.registrarPuesto(puesto);
}

@Override
public Puesto actualizarPuesto(Puesto puesto) {
	// TODO Auto-generated method stub
	return puestoMgr.actualizar(puesto);
}

@Override
public Puesto obtenerPuesto(Integer idPuesto) {
	// TODO Auto-generated method stub
	return puestoMgr.obtenerCompleto(idPuesto);
}

@Override
public PuestoEducacion actualizarPuestoEducacion(PuestoEducacion pe) {
	// TODO Auto-generated method stub
	return puestoMgr.actualizarPuestoEducacion(pe);
}

@Override
public PuestoCapacitacion actualizarPuestoCapacitacion(PuestoCapacitacion pe) {
	// TODO Auto-generated method stub
	return puestoMgr.actualizarPuestoCapacitacion(pe);
}

@Override
public void eliminarPuestoEducacion(PuestoEducacion pe) {
	// TODO Auto-generated method stub
	puestoMgr.eliminarPuestoEducacion(pe);
}

@Override
public void eliminarPuestoCapacitacion(PuestoCapacitacion pe) {
	// TODO Auto-generated method stub
	puestoMgr.eliminarPuestoCapacitacion(pe);
}
}
